<?php

class uEstratigraficaBN  
{
	const TIPO_CORTE = 1;
	const TIPO_HALLAZGO = 2;
	const TIPO_DEPOSITO = 3;
	const TIPO_ENTIERRO = 4;
	const TIPO_MURO = 5;
	const TIPO_CADAVER = 6;
	const TIPO_SHICRA = 7;
	const TIPO_ESTRUCTURA = 8;
	
	public $codUe = null;
	private $objUE = null;
	public  $mensaje = null;
	
	private $listaResponsablesExcavacion = false;
	private $listaRelacionesFisicas = false;
	private $listaPropiedades = false;
	
	public function setCodUe($v) {
		$this->codUe = $v;
	}
	
	public function setObjUE($v) {
		$this->objUE = $v ;
		$this->codUe = $this->objUE->getCodue();
	}
	
	public function getMensaje() {
		return $this->mensaje;
	}
	
	public function crearBaseUE(){
	
		$this->crearListaResponsablesExcavacion();
		$this->crearListaRelacionesFisicas();
		$this->crearListaPropiedades();
		$this->crearListaComponentes();
		$this->actualizarMM($this->codUe); //objUE->getCodue());

	}
	
	public function actualizarBaseUE(){
	
		$this->actualizarListaResponsablesExcavacion();
		$this->actualizarListaRelacionesFisicas();
		$this->actualizarListaPropiedades();
		$this->actualizarListaComponentes();
		$this->actualizarMM($this->objUE->getCodue());
	
	}
	
	public function eliminaUE($codUE) {
		
		$resultado = false;
		
		try {
			$objUE = UestratigraficaPeer::retrieveByPK($codUE);
			$objUE->setEstado("0");
			$resultado = $objUE->save();
		} catch(Exception $e) {
			$this->mensaje = $e->getMessage();
			$resultado = false;
		}	
		
		return $resultado;
	}
	
	public function generarPK() {		
		
		$criteria = new Criteria(UestratigraficaPeer::DATABASE_NAME);
		$n = UestratigraficaPeer::doCount($criteria);
		$n++;	
		$this->codUe = $n;	
		return $n;		
	}
	
	public static function listarCodigos($cod){		
		$criteria = new Criteria(CodigosPeer::DATABASE_NAME);
		$criteria->add(CodigosPeer::COD_GRUPO , $cod);
		$criteria->add(CodigosPeer::CODIGO , '0', Criteria::NOT_EQUAL);
		$v = CodigosPeer::doSelect($criteria);		
		return $v;
	}
	
	// devuelve un array de las propiedades asociadas a la UE
	// de la sgte forma:
	// $array["ABC"] => array(objPropieda1, objPropiedad2)
	public static function listarPropiedadesArray($codUE) {

		$criteria = new Criteria(PropiedadesUePeer::DATABASE_NAME);
		$criteria->add(PropiedadesUePeer::CODUE, $codUE);
		$aObj = PropiedadesUePeer::doSelect($criteria);
		
		$lista = array();
		
		foreach ($aObj as $obj) {
			$tipo_prop = trim($obj->getCodTipoProp());
			$codigo =  trim($obj->getCodPropiedad());
			
			if(!isset($lista[$tipo_prop])) {
				$lista[$tipo_prop] = array();
			}
			
			if($tipo_prop == "TXT") {
				$lista[$tipo_prop][$codigo] = $obj->getValorTextoLargo();
			} else {			
				array_push($lista[$tipo_prop], $codigo);
			} 
		}
		
		return $lista;
	}	
	
	//////////////////////////////////////////////////////////////////////////////////////////////
	
	/////////////////Inicio Luis/////////////////////////////
	//---------------------------Inicio Componente ListaComponentes---------------------------------//
	public function setListaComponentes($listaComponentes){
		$this->listaComponentes = $listaComponentes;
	}
	
	public function crearListaComponentes(){
		if($this->listaComponentes){
	
				
			// grabar lista de relaciones fisicas
			$oComposicionBN = new ComposicionBN();
			foreach($this->listaComponentes as $oItem) {
				$oItem->setCodue($this->codUe);
				$oComposicionBN->crearComposicion($oItem);
			}
	
		}
	}
	
	public function actualizarListaComponentes(){
		if($this->listaComponentes){
	
			// grabar lista de relaciones fisicas
			$oComposicionBN = new ComposicionBN();
			$oComposicionBN->eliminarComposicion($this->objUE->getCodue());
			foreach($this->listaComponentes as $oItem) {
				$oItem->setCodue($this->objUE->getCodue());
				$oComposicionBN->crearComposicion($oItem);
			}
	
		}
	}
	
	///////////////Fin Luis/////////////////////////////
	
	//---------------------------Inicio Componente Propiedades---------------------------------//
	public function setListaPropiedades($listaPropiedades){
		$this->listaPropiedades = $listaPropiedades;
	}
	
	public function crearListaPropiedades(){
		if($this->listaPropiedades) {
			// grabar propiedades de la UE
			$oPropiedadesUeBN = new propiedadesUeBN();
			foreach($this->listaPropiedades as $oPropiedad) {
				$oPropiedad->setCodue($this->codUe);
				$oPropiedadesUeBN->crearPropiedadesUe($oPropiedad);
			}
		}
	}
	
	public function actualizarListaPropiedades(){
		if($this->listaPropiedades) {
			// grabar propiedades de la UE
			$oPropiedadesUeBN = new propiedadesUeBN();
			$oPropiedadesUeBN->eliminarPropiedadesUe($this->codUe);
			foreach($this->listaPropiedades as $oPropiedad) {
				$oPropiedad->setCodue($this->codUe);
				$oPropiedadesUeBN->crearPropiedadesUe($oPropiedad);
			}
		}
	}
	
	//---------------------------Inicio Componente Responsables---------------------------------//
	public function setListaResponsablesExcavacion($listaResponsablesExcavacion){
		$this->listaResponsablesExcavacion = $listaResponsablesExcavacion;
	}
	
	public function crearListaResponsablesExcavacion(){
		if($this->listaResponsablesExcavacion){
			// grabar lista de responsables de excavacion (arqueologos y tecnicos)
			$oResponsableExcavacionBN = new ResponsableExcavacionBN();
			foreach($this->listaResponsablesExcavacion as $oItem) {
				$oItem->setCodue($this->codUe);
				$oResponsableExcavacionBN->crearResponsableExcavacion($oItem);
			}
		}
	}
	
	public function actualizarListaResponsablesExcavacion(){
		if($this->listaResponsablesExcavacion){
	
			// grabar lista de responsables de excavacion (arqueologos y tecnicos)
			$oResponsableExcavacionBN = new ResponsableExcavacionBN();
			$oResponsableExcavacionBN->eliminarResponsablesExcavacionUE($this->objUE->getCodue());
			foreach($this->listaResponsablesExcavacion as $oItem) {
				$oItem->setCodue($this->objUE->getCodue());
				$oResponsableExcavacionBN->crearResponsableExcavacion($oItem);
			}
	
		}
	}
	
	//---------------------------Inicio Componente ListaRelacionesFisicas---------------------------------//
	public function setListaRelacionesFisicas($listaRelacionesFisicas){
		$this->listaRelacionesFisicas = $listaRelacionesFisicas;
	}
	
	public function crearListaRelacionesFisicas(){
		if($this->listaRelacionesFisicas){
				
			// grabar lista de relaciones fisicas
			$oRelacionesFisicasBN = new RelacionesFisicasBN();
			foreach($this->listaRelacionesFisicas as $oItem) {
				$oItem->setCodue($this->codUe);
				$oRelacionesFisicasBN->crearRelacionFisica($oItem);
			}
		}
	}
	
	public function actualizarListaRelacionesFisicas(){
		if($this->listaRelacionesFisicas){
				
			// grabar lista de relaciones fisicas
			$oRelacionesFisicasBN = new RelacionesFisicasBN();
			$oRelacionesFisicasBN->eliminarRelacionesFisicas($this->objUE->getCodue());
			foreach($this->listaRelacionesFisicas as $oItem) {
				$oItem->setCodue($this->objUE->getCodue());
				$oRelacionesFisicasBN->crearRelacionFisica($oItem);
			}
		}
	}
	
	public static function listarPadres($cod){
	
		$criteria = new Criteria(uEstratigraficaPeer::DATABASE_NAME);
		$criteria->add(uEstratigraficaPeer::TIPO_PARENT, 'P');
		$criteria->add(uEstratigraficaPeer::COD_TIPOUE, $cod);
		$v = uEstratigraficaPeer::doSelect($criteria);
	
		return $v;
	}

	public static function obtenerPorPK($pk){
	
		$ue = UestratigraficaPeer::retrieveByPK($pk);
	
		
		return $ue;
	
	}
	
	public function validarCodUe($codText, $cod){
		
		$criteria = new Criteria(uEstratigraficaPeer::DATABASE_NAME);
		$criteria->add(uEstratigraficaPeer::CODUE_TEXT, $codText);
		$criteria->add(uEstratigraficaPeer::CODUE , $cod, Criteria::NOT_EQUAL);
		$v = uEstratigraficaPeer::doSelect($criteria);
		
		$n = count($v);
		
		if($n) {
			
			$msj = "El codigo UE(".$codText.") ya se encuentra registrado" ;			
			throw new Exception($msj);
		}
		
	}
	
	public static function getListaMm($codUe, $tipo){
		
		$criteria = new Criteria(MmUePeer::DATABASE_NAME);
		$criteria->add(MmUePeer::CODUE , $codUe);
		$criteria->add(MmUePeer::TIPOMM , $tipo);
		$criteria->add(MmUePeer::ESTADO , "A");
		$v = MmUePeer::doSelect($criteria);
		
		return $v;
		
	}
	
	function actualizarMM($codUe){
		global $URL_RAIZ, $UPLOAD_DIR, $usuario;
		$dir = $URL_RAIZ."multimedia/".$codUe;
		$url = URL_PATH."multimedia/".$codUe;
		
		
		$af = $this->listaFiles($UPLOAD_DIR, $usuario.'/f');
		$ap = $this->listaFiles($UPLOAD_DIR, $usuario.'/p');
		$av = $this->listaFiles($UPLOAD_DIR, $usuario.'/v');
		$ai = $this->listaFiles($UPLOAD_DIR, $usuario.'/i');
		
		// verificar si existe dir 
		if (!is_dir($dir)) {
			@mkdir($dir);
		}
		
		if(count($af)){
			if (!is_dir($dir."/f")) {
				@mkdir($dir."/f");
			}
			foreach ($af as $a){
				if(@copy($a['dir'], $dir."/f/".$a['name'])){
					@unlink($a['dir']);
					$oMmUe = new MmUe();
					$oMmUe->setCodue($codUe);
					$oMmUe->setCodmm($this->getPkMm($codUe, "f"));
					$oMmUe->setTipomm("f");
					$oMmUe->setTitulo($a['name']);
					$oMmUe->setDescripcion($url."/f/".$a['name']);
					$oMmUe->setEstado("A");
					
					$oMmUe->save();
				}
			}	
		}
		
		if(count($ap)){
			if (!is_dir($dir."/p")) {
				@mkdir($dir."/p");
			}
			foreach ($ap as $a){
				if(@copy($a['dir'], $dir."/p/".$a['name'])){
					@unlink($a['dir']);
					$oMmUe = new MmUe();
					$oMmUe->setCodue($codUe);
					$oMmUe->setCodmm($this->getPkMm($codUe, "p"));
					$oMmUe->setTipomm("p");
					$oMmUe->setTitulo($a['name']);
					$oMmUe->setDescripcion($url."/p/".$a['name']);
					$oMmUe->setEstado("A");
					
					$oMmUe->save();
				}
			}
			
		}
		
		
		if(count($av)){
			if (!is_dir($dir."/v")) {
				@mkdir($dir."/v");
			}
			foreach ($av as $a){
				if(@copy($a['dir'], $dir."/v/".$a['name'])){
					@unlink($a['dir']);
					$oMmUe = new MmUe();
					$oMmUe->setCodue($codUe);
					$oMmUe->setCodmm($this->getPkMm($codUe, "v"));
					$oMmUe->setTipomm("v");
					$oMmUe->setTitulo($a['name']);
					$oMmUe->setDescripcion($url."/v/".$a['name']);
					$oMmUe->setEstado("A");
					$oMmUe->save();
				}
			}
		
		}
		
		if(count($ai)){
			if (!is_dir($dir."/i")) {
				@mkdir($dir."/i");
			}
			foreach ($ai as $a){
				if(@copy($a['dir'], $dir."/i/".$a['name'])){
					@unlink($a['dir']);
					$oMmUe = new MmUe();
					$oMmUe->setCodue($codUe);
					$oMmUe->setCodmm($this->getPkMm($codUe, "i"));
					$oMmUe->setTipomm("i");
					$oMmUe->setTitulo($a['name']);
					$oMmUe->setDescripcion($url."/i/".$a['name']);
					$oMmUe->setEstado("A");
					$oMmUe->save();
				}
			}
		
		}
		
		
	}
	
	function listaFiles($UPLOAD_DIR, $dir) {
		
		$dir = $UPLOAD_DIR.$dir;
	    $a_list = array();
		$i = 1;
		if (is_dir($dir)) {
			if ($dh = opendir($dir)) {
				while (($file = readdir($dh)) !== false) {
					if(filetype($dir."/".$file)=="file"){
						$a_list[$i]=array('name'=>$file,'dir'=>$dir."/".$file);
						$i++;
					}
				}
				closedir($dh);
			}
		}
		return $a_list;
	}
	
	public function getPkMm($codUe, $tipo){
	
		$criteria = new Criteria(MmUePeer::DATABASE_NAME);
		$criteria->add(MmUePeer::CODUE , $codUe);
		//$criteria->add(MmUePeer::TIPOMM , $tipo);
		$v = MmUePeer::doSelect($criteria);
	
		return count($v)+1;
	
	}
		
}
